package cn.nawang.ebeim.server.task;

import cn.nawang.ebeim.server.constants.Constant;
import cn.nawang.ebeim.server.queue.EbeimQueues;
import cn.nawang.ebeim.server.service.StorageService;
import cn.nawang.ebeim.server.service.StorageServiceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

/**
 * @ClassName: UploadVersionTreeToHdfsTask
 * @Description: TODO
 * @author 许炜毅
 * @date 2015年8月20日 下午4:24:18
 * @version v1.0
 */
public class UploadFileTask implements IOTask {

  private static final Logger LOG = LoggerFactory.getLogger(UploadFileTask.class);

  //单个文件
  private String tempDsDir;
  private String fileType;

  public UploadFileTask(String tempDsDir, String fileType) {
    super();
    this.tempDsDir = tempDsDir;
    this.fileType = fileType;
  }

  /**
   * 执行任务
   */
  public void execute() {
    try {
      // 从临时数据源目录读取数据（从临时文件夹读取源文件）
      File dsDir = new File(tempDsDir);

      if (fileType.equals(Constant.FILE_TYPE_FILE)) {
        StorageService storageService = StorageServiceFactory.getStorageService();
        storageService.uploadFile(dsDir.getParentFile().getName(),dsDir.getName());
      }
      if (fileType.equals(Constant.FILE_TYPE_VERSION)) {
        StorageService storageService = StorageServiceFactory.getStorageService();
        storageService.uploadVersionTree(dsDir.getParentFile().getName(),dsDir.getName());
      }

      if(dsDir.exists()){
        boolean fileFlag=dsDir.delete();
        LOG.info("文件上传成功,删除临时文件:{} --删除结果:"+fileFlag ,dsDir);
      }

      //与API服务器的交互 改为异步,避免影响文件上传线程的处理效率
      EbeimQueues.updateToApiServerQueue.put(new UpdateToApiServerTask(fileType,dsDir));
    } catch (Exception ex) {
      throw new RuntimeException("execute 异常:{}",ex);
    }
  }

  @Override
  public String toString() {
    return "tempDsDir=" + tempDsDir + ",fileType=" + fileType ;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    UploadFileTask that = (UploadFileTask) o;

    if (fileType != null ? !fileType.equals(that.fileType) : that.fileType != null) return false;
    if (tempDsDir != null ? !tempDsDir.equals(that.tempDsDir) : that.tempDsDir != null) return false;

    return true;
  }

  @Override
  public int hashCode() {
    int result = tempDsDir != null ? tempDsDir.hashCode() : 0;
    result = 31 * result + (fileType != null ? fileType.hashCode() : 0);
    return result;
  }
}
